feat(pydeck): add mapId support for Google Maps#10084
Open
n0531m wants to merge 3 commits intovisgl:masterfrom
Open
feat(pydeck): add mapId support for Google Maps#10084n0531m wants to merge 3 commits intovisgl:masterfrom
n0531m wants to merge 3 commits intovisgl:masterfrom
Conversation
Author
|
@ajduberstein would you mind taking a look at this? |
felixpalmer
requested changes
Mar 31, 2026
|
|
||
| def _set_api_keys(self, api_keys: dict = None): | ||
| """Sets API key for base map provider for both HTML embedding and the Jupyter widget""" | ||
| valid_providers = [p.value for p in BaseMapProvider] |
Collaborator
There was a problem hiding this comment.
The old code called BaseMapProvider(k) on every key, which would raise ValueError for unknown keys — acting as input validation. The new code silently ignores unknown keys. This is needed because google_maps_map_id isn't a provider, but it also means typos like api_keys={"mapbx": "key"} will silently be ignored instead of raising an error. A better approach would be to define an allowlist of known non-provider keys:
NON_PROVIDER_KEYS = {"google_maps_map_id"}
for k in api_keys:
if k not in NON_PROVIDER_KEYS:
BaseMapProvider(k) # will raise ValueError for unknown keys| return deckgl; | ||
| } | ||
|
|
||
| export {createDeck, updateDeck, jsonConverter}; |
|
|
||
| # Handle google_maps_map_id specifically | ||
| gm_map_id = api_keys.get("google_maps_map_id") or os.getenv("GOOGLE_MAPS_MAP_ID") | ||
| self.google_maps_map_id = gm_map_id |
Collaborator
There was a problem hiding this comment.
use setattr like the current code?
| setattr(self.deck_widget, attr_name, attr_value) | ||
|
|
||
| # Handle google_maps_map_id specifically | ||
| gm_map_id = api_keys.get("google_maps_map_id") or os.getenv("GOOGLE_MAPS_MAP_ID") |
Collaborator
There was a problem hiding this comment.
Actually, in general it is a bit weird to set the mapId in_set_api_keys as it isn't an API key. Better to do something like:
def _set_google_maps_map_id(self, map_id=None):
self.google_maps_map_id = map_id or os.getenv("GOOGLE_MAPS_MAP_ID")
if has_jupyter_extra():
self.deck_widget.google_maps_map_id = self.google_maps_map_id
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds support for the mapId parameter when using Google Maps as a basemap provider in pydeck.
Specifying a mapId is required to enable Google Maps Vector Maps, which unlocks modern features such as:
This change includes updates to both the Python bindings (pydeck) and the JavaScript component (@deck.gl/jupyter-widget) to ensure seamless
synchronization in Jupyter environments, standalone HTML exports, and Google Colab.
Changes
Python (pydeck)
GOOGLE_MAPS_MAP_ID.
JavaScript (@deck.gl/jupyter-widget)
Example Usage
Testing Performed
provider level.
Related Issues
Enables official support for Google Maps Vector Maps, resolving gaps highlighted in several community issues (e.g., #9856, #8476) where users previously had to use manual workarounds to synchronize mapId.